#include "multinivel.h"

Multinivel::Multinivel(Grafo *grafo, int paramEntrada){ //fazer um obj que é paramEntrada
  
  fB = 2.0/3;//pegar da entrada
  metodo = 0;//pegar da entrada
  
  parada = ceil(log(grafo->adj.size()*1.0)/log(2.0));
  total = grafo->adj.size();
  
  int n = grafo->adj.size();
  
  pesoMax = floor(n*1.0/(log(n*1.0)/log(2.0))); //floor(grafo->adj.size() * fB);
  
  grafo->pesoMax = pesoMax;
  
  multinivel(grafo);
  
}

void Multinivel::multinivel(Grafo *grafo){
  
  int n = grafo->adj.size();
  int nV = 0;
  
  if(n > parada){
  
    Grafo grafoC;
    vector<int> *mapaVolta;
    
    Contrai objContrai(grafo, &grafoC, metodo, &mapaVolta);
    nV = grafoC.adj.size();
    
    if(n != nV){
    
      multinivel(&grafoC);
    
      Expande objExpande(grafo, &grafoC, mapaVolta);
      
      KL objKl(grafo, total, fB);
    }
  }
  
  if(n <= parada || nV == n){

    //printf("Particiona!!\n");
    
    Particao objPart(grafo, total, fB);
    objPart.geraParticaoOtima();
    
    KL objKl(grafo, total, fB);
    
  }
 
}

